package com.bjpowenode.java;

/**
 * @author wuyuecai
 * @create 2021-05-30 15:59
 */
public class BloodSuckerNums1 {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int num = 1001; num < 10000; num++) {
            math(num);
        }
        long end = System.currentTimeMillis();
        System.out.println("使用的时间为："+(end-start));
    }
    //用于取出原数字的各个位数的数字，关键点在于不能数字重复
    private static boolean math(int num) {
        int[] temp1 = new int[2];//存放两个数字，不与temp2数字重复
        int[] temp2 = new int[2];//存放两个数字，不与temp1数字重复
        int a = num/1000;//千位数字
        int b = num/100%10;//百位数字
        int c = num/10%10;//十位数字
        int d = num%10;//个位数字
        int[] data = {a,b,c,d};//存放四位数的各个位的数字
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data.length; j++) {
                //前两个数字不能相同
                if(i == j){
                    continue;
                }
                temp1[0] = data[j];
                temp1[1] = data[i];
                for (int k = 0; k < data.length; k++) {
                    if(k != i && k != j){
                        temp2[0] = data[k];
                        for (int l = 0; l < data.length; l++) {
                            if(l != i && l != j && l != k){
                                temp2[1] = data[l];
                                if(multi(data,temp1,temp2)){
                                    return true;
                                }
                            }
                        }
                    }
                }

            }
        }


        return false;
    }
    //用于判断各个位数组成的两位数的乘积是否和原数字相等
    private static boolean multi(int[] data, int[] temp1, int[] temp2) {
        int i = toInit(temp1);
        int j = toInit(temp2);
        int k = toInit(data);
        if(k == i*j){
            System.out.println(k +"="+i+"*"+j );
            return true;
        }
        return false;
    }
    //用于将temp1、temp2、data数组中的数字还原成具体的数，例如：将1,2两个数字还原成12这个数
    private static int toInit(int[] temp) {
        int m = 0;
        int[] temp1 = new int[temp.length];
        //将各个位的数字还原成相应的数，例如：千位数字1还原成1000等
        //pow函数是求第一个参数的第二个参数次方
        for (int i = 0; i < temp.length; i++) {
            temp1[i] = temp[i]*(int) Math.pow(10,temp.length-1-i);
        }
        //将各个位的数字加起来组成新的数，例如：1000+200+60+0=1260
        for (int i = 0; i < temp1.length; i++) {
            m += temp1[i];
        }
        return m;
    }
}
